package leetcode_题库;

import jdk.nashorn.internal.runtime.JSErrorType;

import java.util.Arrays;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Ding
 * @create 2022/8/17 11:08
 */
public class _189_轮转数组 {
    public static void main(String[] args) {

        int[] nums = new int[]{-1,-100,3,99};
        int k = 6;
        //为什么取余，我们可以让他轮转许多次，但对于例子而言，每第四次就和不旋转一致，因此，取余长度即可
        k %= nums.length;
        //创建临时数组
        int[] temp = new int[nums.length];
        //使用效率最好的复制法，让临时数组第k位开始，错位插入原数组第0位元素，执行长度为原数组length-k
        System.arraycopy(nums,0,temp,k,nums.length - k);
        //依然使用效率最好的复制法，让临时数组从第0位开始，错位插入原数组的第length - k位元素，执行长度为k
        System.arraycopy(nums,nums.length - k,temp,0,k);
        //再使用此方法复制回去
        System.arraycopy(temp,0,nums,0,nums.length);
        //全程不需要循环，也不能用循环！可以以O(1)的复杂度结束战斗

        /*

            > 2022/08/17 14:22:05
            解答成功:
                执行耗时:0 ms,击败了100.00% 的Java用户
                内存消耗:56.6 MB,击败了87.48% 的Java用户

         */
    }
}
